package com.sinog.alarm.util;

import lombok.extern.slf4j.Slf4j;
import lombok.val;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Field;

/**
 * @desc 检查对象属性是否全为空
 * @author lzq
 * @date 2021-06-27 15:37
 */
@Slf4j
public final class GkObjectUtils {

    /**
     * 校验对象中元素是否都为null
     * @param obj 校验对象
     * @return Boolean
     */
    public static Boolean isAllFieldNull(Object obj) {
        boolean flag = true;
        try {
            // 得到类对象
            Class<?> stuCla = obj.getClass();
            //得到属性集合
            Field[] fs = stuCla.getDeclaredFields();
            //遍历属性
            for(Field f : fs) {
                // 设置属性是可以访问的(私有的也可以)
                f.setAccessible(true);
                // 得到此属性的值
                Object val = f.get(obj);
                //只要有1个属性不为空,那么就不是所有的属性值都为空
                if(null != val) {
                    flag = false;
                    break;
                }
            }
        } catch(IllegalAccessException | SecurityException e) {
            log.error("判断对象是否为空报错: {}",e.getMessage());
        }
        return flag;
    }

    /**
     * 描述
     * @param obj 校验对象
     * @return true:对象属性全为空 false:对象属性不全为空
     */
    public static boolean isAllFieldNull1(Object obj) throws IllegalAccessException {
        //获取类对象
        val oc = obj.getClass();
        //获取属性数组
        Field[] fields = oc.getDeclaredFields();
        //遍历属性
        for(Field field : fields) {
            //设置私有属性可访问
            field.setAccessible(true);
            //得到此属性的值
            Object o = field.get(obj);
            //只要有1个属性不为空,返回false
            if(null != o) {
                if(o instanceof String && StringUtils.isBlank((String)o)){
                    continue;
                }
                return false;
            }
        }
        return true;
    }
}